//
//  SHHomeViewController.swift
//  SHWeibo3
//
//  Created by teacher on 16/7/19.
//  Copyright © 2016年 teacher. All rights reserved.
//

import UIKit
// cell 可重用标识符
private let homeCellId = "homeCellId"

class SHHomeViewController: SHVisitorViewController {
    
    // 全局的模型数组
    lazy var statusListViewModel: SHStatusListViewModel = SHStatusListViewModel()
    

    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        if !isLogin {
            visitorView?.setupVisitorViewInfo(nil, title: nil)
            return
        }
        setupTableViewInfo()
        getHomeData()
    }
    // 设置tableView
    func setupTableViewInfo(){
        
        navigationController!.view.insertSubview(pullDownTipLabel, belowSubview: navigationController!.navigationBar)
        
        
        // 设置数据源代理
        tableView.dataSource = self
        tableView.delegate = self
        // 注册cell
        tableView.registerClass(SHStautsCell.self, forCellReuseIdentifier: homeCellId)
        // 设置tableViewCell高度
        //tableView.rowHeight = 200
        // 设置tableView 的cell的预估行高 (预估行高越接近真实cell高度越好)
        tableView.estimatedRowHeight = 200
        
        tableView.separatorStyle = .None
        
        // 设置tableView footView
        tableView.tableFooterView = indicatorView
        // 添加刷新控件
        tableView.addSubview(refreshControl)
        // 添加事件
        refreshControl.addTarget(self, action: "refreshAction", forControlEvents: UIControlEvents.ValueChanged)
        
    }
    
    func refreshAction(){
        getHomeData()
        
    }
    
    // MARK: - 懒加载控件
    // 菊花
    private lazy var indicatorView: UIActivityIndicatorView = {
        let view  = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        // 给菊花设置颜色
        view.color = ThemeColor
        return view
        
    }()
    // 系统下载刷新
    private lazy var refreshControl: SHRefreshControl = SHRefreshControl()
    // 请求微博数据提示
    private lazy var pullDownTipLabel: UILabel = {
        let lab = UILabel(textColor: UIColor.whiteColor(), textFont: 12)
        lab.frame = CGRect(x: 0, y: 64 - 30, width: SCREENW, height: 30)
        lab.textAlignment = .Center
        lab.backgroundColor = ThemeColor
        lab.hidden = true
        return lab
    }()

}
// MARK: - UITableViewDataSource
extension SHHomeViewController: UITableViewDataSource, UITableViewDelegate {
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusList.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(homeCellId, forIndexPath: indexPath) as! SHStautsCell
        // 给cell赋值
        cell.statusViewModel = statusListViewModel.statusList[indexPath.row]
        return cell
    }
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        // 如果判断当前显示的是最后一个cell 的时候 才可以叫菊花转 且 当前菊花没有开始动画
        if indexPath.row == statusListViewModel.statusList.count - 1 && !indicatorView.isAnimating(){
            // 开始动画
            indicatorView.startAnimating()
            getHomeData()
        }
    }
    
}

// MARK: - 请求微博数据
extension SHHomeViewController {
    // 请求首页数据
    func getHomeData(){
        
        statusListViewModel.loadHomeData(indicatorView.isAnimating()) { (isSuc, count) -> () in
            
            // 停止动画
            self.endRefreshing()
            if !isSuc {
                print("请求数据失败")
                return
            }
            self.tableView.reloadData()
            // 下拉刷新
            if count >= 0{
                self.setpullDownTipLabelAnim(count)
            }
        }
    }
    
    // 设置微博提示动画
    func setpullDownTipLabelAnim(count: Int){
        // 判断如果当前在动画也就是显示 就不在进行动画
        if pullDownTipLabel.hidden == false{
            return
        }
        // 显示空间
        pullDownTipLabel.hidden = false
        var name = ""
        if count == 0 {
            name = "您已经是最新的微博数据啦"
        }else {
            name = "您更新了\(count)条微博"
        }
        // 设置text
        pullDownTipLabel.text = name
        
        // 设置动画
        UIView.animateWithDuration(0.5, animations: { () -> Void in
            
            self.pullDownTipLabel.transform = CGAffineTransformMakeTranslation(0, 30)
            
            }) { (_) -> Void in
                UIView.animateWithDuration(0.5, delay: 1, options: [], animations: { () -> Void in
                    self.pullDownTipLabel.transform = CGAffineTransformIdentity
                    }, completion: { (_) -> Void in
                        // 完成后隐藏
                        self.pullDownTipLabel.hidden = true
                })
        }
    }
    
    
    // 停止各种动画
    func endRefreshing(){
        self.indicatorView.stopAnimating()
        self.refreshControl.endRefreshing()
    }
}


extension SHHomeViewController {
    func test(){
//        // 请求urlString
//        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
//        // 请求参数
//        let params = ["access_token": SHUserAccountViewModel.sharedTools.accessToken!]
//        // 发送请求
//        SHNetworkTools.sharedTools.request(SHNetworkToolsType.GET, urlString: urlString, parameters: params, success: {[weak self] (response) -> () in
//            print("请求成功:\(response)")
//            // 判断他是否为nil 而且是否可以转成数组
//            guard let res = response?["statuses"] as?[[String: AnyObject]] else{
//                return
//            }
//            // 定义一个临时可变数组
//            var tempArray:[SHStatus] = [SHStatus]()
//            // 遍历数组
//            for dic in res {
//                // 创建一个模型
//                let status = SHStatus(dict: dic)
//                // 添加模型
//                tempArray.append(status)
//                
//            }
//            // 赋值
//            self?.statusList = tempArray
//            // 刷新UI
//            self?.tableView.reloadData()
//            
//            }) { (error) -> () in
//                print("请求失败:\(error)")
//        }
    }
}














